import socket
#创建Soket对象
socket_sever = socket.socket()
#绑定ip地址的端口
socket_sever.bind(("localhost", 8888))
#监听窗口
socket_sever.listen(1)
#listen方法内接收一个整数传参,表示接收的连接数量
#等待客户端的连接
# result: tuple = socket_sever.accept()
# conn = result[0]        #客户段和服务端的链接对象
# address = result[1]     #客户端的地址信息
conn, address = socket_sever.accept()
#accept方法返回的是二元元组(链接对象,客户端信息
#可以通过 变量1, 变量2 = socket_server.accept()的形式,直接接受元组内的两个元素
#accept()是一个阻塞的方法,等待客户端的链接,如果没有链接,就卡在这一行不向下执行了

print(f"接收到了客户端的连接,客户端的信息是: {address}")
#接收客户端的
while True:
    #接收客户端的信息, 要使用客户端和服务端的本次链接的对象,而非socket_serve对象
    data: str = conn.recv(1024).decode("UTF-8")
    #recv接收的参数是缓存区的大小,一般给1024即可
    #recv方法返回的是字节数组也就是Bytes对象,不是字符串,可以通过decode方法通过UTF-8解码,将二进制编码转化为字符串对象
    print(f"客户端发来的消息是: {data}")
    #发送回复的消息
    msg = input("请输入你要和客户端回复的消息: ")
    if msg == 'exit':
        break
    conn.send(msg.encode("UTF-8"))
#关闭链接
conn.close()
socket_sever.close()
